package demo.day11;

/**
 * @Auther: hjy(lc))
 * @Date: 2022/7/29-07-29-14:05
 * @Description：demo.day11       内部类
 */
/*
    1、成员内部类
        内部类中不能有静态变量和方法       //只有当外部类初始化，并创建内部类对象时，内部类才被初始化
        内部类可以访问当前外部类的所有变量和方法
    2、静态内部类
        可以有静态方法、变量
        不可以访问外部类的非静态方法和变量

 */
public class InnerClass {
    private int age = 20;
    public static String name = "hhh";
    public static void out(){
        System.out.println("InnerClass.out");
    }
    public void method2(){
        System.out.println("InnerClass.method2");
    }
    //成员内部类
    public class innerClass{
        int age = 18;
        //可以访问InnerClass中的所有资源（变量/方法）
        public void method(int age){
            //访问内部类的局部变量
            System.out.println(age);
            //访问内部类的成员变量
            System.out.println(this.age);
            //访问外部类的成员变量   外部类.this 外部类引用
            System.out.println(InnerClass.this.age);
            //不可以访问外部类的普通方法\变量

            //访问外部类的静态方法
            InnerClass.out();
        }
    }
    //静态内部类
    public static class innerStaticClass{
        static String name;
        int age = 18;
        //可以访问InnerClass中的所有资源（变量/方法）
        public void method(int age){
            //访问内部类的局部变量
            System.out.println(age);
            //访问内部类的成员变量
            System.out.println(this.age);
            //访问外部类的成员静态变量   外部类.静态变量 外部类引用
            System.out.println(InnerClass.name);
            //访问外部类的静态方法
            InnerClass.out();
        }
    }
    public static void main(String[] args) {
        InnerClass inner = new InnerClass();
        //创建内部类对象   通过外部类对象创建
        innerClass innerClass = inner.new innerClass();
        innerClass.method(12);

        //创建静态内部类
        innerStaticClass staticClass = new innerStaticClass();
        staticClass.method(22);
    }
}
